#include<bits/stdc++.h>

using namespace std;

using ll=long long;
#define endl '\n'
const int maxn = 4;
int n = 4, m = 4;
char G[maxn][maxn] = {
        'A', 'B', '/', 'D',
        'E', 'F', '/', 'H',
        'I', '/', 'K', 'L',
        'M', 'N', 'O', 'P',
};
int book[maxn][maxn];
int fx[4][2] = {{0,  1},
                {0,  -1},
                {1,  0},
                {-1, 0}};

void bfs(int x, int y) {//O(m*n)
    queue<pair<int, int>> Q;
    Q.push(make_pair(x, y));
    book[x][y] = 1;
    while (Q.size()) {
        auto pt = Q.front();
        int hx = pt.first;
        int hy = pt.second;
        cout << G[x][y];
        Q.pop();
        for (int i = 0; i < 4; i++) {
            int nx = hx + fx[i][0];
            int ny = hy + fx[i][1];
            if (nx < 0 || nx >= n || ny < 0 || ny >= m || G[nx][ny] == '/' || book[nx][ny])continue;
            Q.push(make_pair(nx, ny));
            book[nx][ny] = 1;
        }
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    bfs(0, 0);
    return 0;
}
/**
这段代码是一个简单的BFS算法示例。程序定义了一个4x4的字符型数组G，表示一个迷宫地图。其中'A'到'P'表示可达的路径，'/'表示障碍物。另外定义了一个二元组fx，用来表示在搜索中每个节点的四个邻接节点，定义一个队列Q用来在BFS搜索过程中存储从当前节点出发的所有未访问的可达节点，而book用来记录每个坐标是否已经被遍历过。

接着，程序定义了一个BFS搜索函数bfs，其输入参数是一个起点 (x, y) 的坐标。这个函数使用了一个队列Q和一个book数组来实现BFS算法。首先将起点(x, y)入队，并将它的book值设为1。然后，程序在一个while循环中进行迭代：从队列Q中取出当前节点，输出它的值，然后遍历它的四个邻接节点，将未曾访问过的邻接节点加入队列Q中，并将它们的book值设为1。这样可以保证搜索到的所有节点一定按照广度优先的顺序被处理。

最后在int main()函数中，调用bfs函数，其参数为起点坐标(0,0)，即从左上角开始遍历地图。程序输出所有遍历到的字符值，即从起点出发可以到达的所有位置的字母。
 */